// // 泛型
// // 使用泛型变量
// const fun = <T>(a: T): T => {
// 	return a
// }

// const f1 = fun<number>(1)
// const f2 = fun<string>('123')


// 泛型类型
// function fun<T>(params: T): T {
// 	return params
// }

// let s: <T>(a: T) => T 

// s = fun


// // 泛型类
// class Person<T, U> {
// 	unName: T
// 	price: U
// 	constructor(name: T, price: U) {
// 		this.unName = name
// 		this.price = price
// 	}
// }

// const f1 = new Person<string, number>('123', 1)
// const f2 = new Person<boolean, Date>(true, new Date())

// // 泛型约束
// interface IString {
// 	length: number
// 	toString: () => string
// 	qweqweq: () => number
// }

// function fun<T extends IString>(str: T) {
// 	console.log(str.length);
// }



// fun('123123')
// fun([1, 2, 3, 4])
// fun({ length: 1, qweqweq() { return 1 } })